from django.db import close_old_connections


class WebSocketAuthMiddleware:
    def __init__(self, inner):
        # 存储通过的ASGI应用程序
        self.inner = inner

    def __call__(self, scope):
        # 关闭旧的数据库连接，以防止使用超时的连接
        close_old_connections()

        # 自定义校验逻辑,获取子协议内容
        protocol = dict(scope['headers']).get(b'sec-websocket-protocol', b'').decode()
        # 处理子协议
        # 这里塞进scope的值可以在消费者方法中直接获取
        # 关于scope的更多信息可以参考官方文档 https://channels.readthedocs.io/en/latest/topics/consumers.html?highlight=scope#scope
        accept = False if not protocol else True
        # 直接返回内部应用程序并让它继续运行
        return self.inner(dict(scope, accept=accept))






